package ru.mirent;

import io.qameta.allure.Allure;
import org.apache.commons.io.FileUtils;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsProvider;
import org.junit.jupiter.params.provider.ArgumentsSource;

import java.io.File;
import java.io.IOException;
import java.util.stream.Stream;

/**
 * Примеры отображения вложений в Allure-отчете. В Allure реализовано отображение не всех типов содержимого.
 * В примере приведены наиболее часто используемые форматы данных.
 * Большинство других форматов отображаются как вложения для скачивания.
 */
public class MimeTypesTest {

    @DisplayName("Пример")
    @ParameterizedTest(name = "{0} - {1}")
    @ArgumentsSource(TestData.class)
    void exampleTest(String mimeType, String fileExtension, String data) {
        Allure.addAttachment("Вложение", mimeType, data, fileExtension);
    }

    private static class TestData implements ArgumentsProvider {
        @Override
        public Stream<? extends Arguments> provideArguments(ExtensionContext context) throws IOException {
            String htmlData = FileUtils.readFileToString(
                    new File("src/test/resources/attachments/html_data.html"), "UTF-8");
            String jsonData = FileUtils.readFileToString(
                    new File("src/test/resources/attachments/json_data.json"), "UTF-8");
            String markdownData = FileUtils.readFileToString(
                    new File("src/test/resources/attachments/markdown_data.md"), "UTF-8");
            String plainTextData = FileUtils.readFileToString(
                    new File("src/test/resources/attachments/plain_text_data.txt"), "UTF-8");
            String xmlData = FileUtils.readFileToString(
                    new File("src/test/resources/attachments/xml_data.xml"), "UTF-8");

            return Stream.of(
                    Arguments.of(MimeTypes.APPLICATION_JSON.getContentType(), MimeTypes.APPLICATION_JSON.getFileExtension(), jsonData),
                    Arguments.of(MimeTypes.APPLICATION_XML_HTML.getContentType(), MimeTypes.APPLICATION_XML_HTML.getFileExtension(), htmlData),
                    Arguments.of(MimeTypes.TEXT_HTML.getContentType(), MimeTypes.TEXT_HTML.getFileExtension(), htmlData),

                    Arguments.of(MimeTypes.APPLICATION_XML.getContentType(), MimeTypes.APPLICATION_XML.getFileExtension(), xmlData),

                    Arguments.of(MimeTypes.MESSAGE_HTTP.getContentType(), MimeTypes.MESSAGE_HTTP.getFileExtension(), markdownData),
                    Arguments.of(MimeTypes.MESSAGE_HTTP.getContentType(), MimeTypes.MESSAGE_HTTP.getFileExtension(), plainTextData),

                    Arguments.of(MimeTypes.TEXT_PLAIN.getContentType(), MimeTypes.TEXT_PLAIN.getFileExtension(), markdownData),
                    Arguments.of(MimeTypes.TEXT_PLAIN.getContentType(), MimeTypes.TEXT_PLAIN.getFileExtension(), plainTextData)
            );
        }
    }
}
